package com.inspinia.upms.rpc.api;

import com.inspinia.base.pagination.Pager;
import com.inspinia.base.service.BaseService;
import com.inspinia.upms.common.model.post.UpmsPost;
import com.inspinia.upms.common.model.post.UpmsPostVo;

import java.lang.reflect.InvocationTargetException;
import java.util.List;

/**
 * 岗位的服务层接口
 * Created by hs on 2016-9-5.
 */
public interface UpmsPostService extends BaseService<UpmsPost> {


    /**
     * 分页查询岗位信息
     *
     * @param postVo 岗位vo
     * @return
     * @throws InvocationTargetException
     * @throws IllegalAccessException
     */
    Pager<UpmsPostVo> findPage(UpmsPostVo postVo) throws InvocationTargetException, IllegalAccessException;

    /**
     * 批量删除岗位
     *
     * @param ids 岗位id数组
     */
    int batchDelete(Long[] ids);

    /**
     * 验证岗位名称
     *
     * @param name   岗位名称
     * @param deptId 部门id
     * @param posId  岗位id
     * @return
     */
    boolean validName(String name, Long deptId, Long posId);

    /**
     * 获取岗位vo
     *
     * @param id 岗位id
     * @return
     */
    UpmsPostVo getVo(Long id) throws InvocationTargetException, IllegalAccessException;

    /**
     * 查找所有岗位
     *
     * @return
     */
    List<UpmsPost> findAll();

    /**
     * 获取岗位的名称
     *
     * @param postIds 岗位id集合
     * @return
     */
    List<String> findNamesByIds(List<Long> postIds);

    /**
     * 获取岗位已分配的岗位的权限
     *
     * @param id 岗位id
     * @return
     */
    List<Long> findResourceIds(Long id);

    /**
     * 保存资源
     *
     * @param postId      岗位id
     * @param resourceIds 资源id数组
     * @return
     */
    int setResources(Long postId, List<Long> resourceIds);

    /**
     * 查询某个岗位下的用户id
     *
     * @param postName 岗位名称
     * @return
     */
    List<Long> findUserIdsByPostName(String postName);

    /**
     * 查找某岗位下的所有用户id
     *
     * @param postId 岗位id
     * @return
     */
    List<Long> findUserIdsByPostId(Long postId);

    /**
     * 根据部门id获取部门下的所有岗位
     * @return
     */
    List<UpmsPost> findPostByDeptId(Long deptId);
}